#include<stdio.h>

#define N 100

void sort(int arr[], int n);

void InputArr(int a[], int n);

int merge(int a[], int m, int b[], int n, int c[]);

void PrintArr(int c[], int n);

int main(void) {
    int m, n, k, a[N], b[N], c[N * 2];
    printf("请输入两个数组的待输入元素的个数: ");
    scanf("%d%d", &m, &n);
    InputArr(a, m);  //读入a的m个元素
    InputArr(b, n); //读入b的n个元素
    sort(a, m);  //排序
    sort(b, n);  //排序
    k = merge(a, m, b, n, c); //合并两个数组
    PrintArr(c, k);  //输出数组c中k个元素
    return 0;
}

void sort(int arr[], int n) {
    int i, j, temp;
    for (i = 0; i < n - 1; i++) {
        //arr[i]与其后所有元素比较
        for (j = i + 1; j < n; j++)
            if (arr[i] > arr[j]) {
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
    }
}

/* 读入n个整数存入数组arr*/
void InputArr(int arr[], int n) {
    int i;
    for (i = 0; i < n; i++) {
        printf("请输入第%d个整数: ", i + 1);
        scanf("%d", &arr[i]);
    }
}

/* 输出数组arr的n个元素，重复元素不输出*/
void PrintArr(int arr[], int n) {
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

/* 将集合a、b的数据合并到c中, 返回集合c中元素个数 */
int merge(int a[], int m, int b[], int n, int c[]) {
    int i = 0, j = 0, k = 0;
    while (i < m && j < n) {
        if (a[i] < b[j])               /*如果a[i]<b[j]，则存入a[i] */
            c[k++] = a[i++];
        else if (a[i] > b[j])         /*如果a[i]>b[j]，则存入b[j] */
            c[k++] = b[j++];
        else                   /* 如果a[i]==b[j]，则存入a[i]，舍去b[j] */
        {
            c[k++] = a[i];
            i++;
            j++;
        }
    }
    /* 如果数组a中还剩有元素，合并到c中 */
    while (i < m)
        c[k++] = a[i++];

    /* 如果数组b中还剩有元素，合并到c中 */
    while (j < n)
        c[k++] = b[j++];

    return k; //返回集合C中元素个数
}

